package com.example.study2.ThisReference;

/**
 * 计算器类 - 演示链式调用
 * 补充使用场景：返回当前对象引用（链式调用）
 */
public class Calculator {
    private int value = 0;  // 初始值为0

    /**
     * 加法方法 - 返回当前对象
     * @param num 要加的数字
     * @return 当前Calculator对象（this）
     */
    public Calculator add(int num) {
        this.value += num;      // 当前值加上参数
        return this;           // 返回当前对象，这样就能继续调用其他方法
    }

    /**
     * 乘法方法 - 返回当前对象
     * @param num 要乘的数字
     * @return 当前Calculator对象（this）
     */
    public Calculator multiply(int num) {
        this.value *= num;      // 当前值乘以参数
        return this;           // 返回当前对象，支持链式调用
    }

    /**
     * 获取最终结果
     * @return 计算后的值
     */
    public int getValue() {
        return this.value;
    }

    public static void main(String[] args) {
        // ==================== 传统调用方式 ====================
        Calculator calc1 = new Calculator();
        calc1.add(5);          // 先加5
        calc1.multiply(2);     // 再乘2
        System.out.println("传统方式结果: " + calc1.getValue()); // 输出：10

        // ==================== 链式调用方式 ====================
        int result = new Calculator()  // 创建新计算器
                .add(5)                   // 加5，返回计算器对象
                .multiply(2)              // 乘2，返回计算器对象
                .getValue();              // 获取最终结果
        System.out.println("链式调用结果: " + result); // 输出：10

        // 更复杂的链式调用
        int complexResult = new Calculator()
                .add(10)           // 0 + 10 = 10
                .multiply(3)       // 10 × 3 = 30
                .add(20)           // 30 + 20 = 50
                .multiply(2)       // 50 × 2 = 100
                .getValue();
        System.out.println("复杂链式调用结果: " + complexResult); // 输出：100
    }
}